// function play(key,timer,callback){
//     setTimeout(() => {
//         key++;//key 通关的钥匙
//         callback(key);
//     },timer)
// }

// let key = 1;
// //回调地狱
// play(key,1000,(two) => {
//     console.log("第二关的钥匙")
//     play(two,3000,(three) => {
//         console.log("第三关的钥匙",three);
//         play(three,4000,(four) => {
//             console.log("第四关的钥匙",four);
//             //....
//         })
//     });
// });

//Promise:构造函数  new

/**
 * promise:三种状态：pending:进行中  fulfilled:已成功  rejected：已失败
 * 
 * 状态改变：进行中---> 已成功 resolve()  进行中--->已失败 reject()
 * 
 * promise特点：内部状态一旦发生改变就不会再变
 * 
*/

// let p1 = new Promise((resolve,reject) => {})

//p1.then(() => {成功状态触发的函数},() => {失败状态触发的函数})   状态改变时的回调函数

//p1.catch(() => {失败状态触发的函数})

//p1.finally(() => {不管成功失败都会触发})  


function play(key,timer){
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            key++;
            //....
            resolve(key)
        //    reject('错误信息');
        },timer)
    })
}

// play(1,1000).then((two) => {
//     //成功的信息
//     console.log("第二关的钥匙",two)
// },(error) => {
//     //失败的信息
//     console.log("错误信息",error)
// })

// play(1,1000).then((two) => {
//     //成功的信息
//     console.log("第二关的钥匙",two)
// }).catch(error => {
//     console.log(error)
// }).finally(() => {
//     console.log("====")
// })

// play(1,1000).then(two => {
//     console.log(two)
//     return play(two,3000)
// }).then(three => {
//     console.log(three);
//     return play(three,3000)
// }).then(four => {
//     console.log(four);
//     //....
// })

//ES7  async await

// async函数  返回值

// 普通函数   返回值  没有return  undefined

//Promise.resolve();  //把值包装成成功状态

async function run(){
    let two = await play(1,1000);
    console.log(two)
    let three = await play(two,2000);
    console.log(three)
    let four = await play(three,2000);
    console.log(four)
    //...
    return 1
}

// console.log(run());

run().then(res => {
    console.log(res)
})


//promise async 明白